package com.example.cd5160866.activityanimotion;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.ActivityOptionsCompat;

/**
 * Created by cd5160866 on 16/9/7.
 */
public abstract class AnimationBaseActivity extends Activity {
    /**
     * 此变量用于启动activity时的标识，用于判断activity结束时是否覆盖原有动画，以保持启动退出动画一致性
     */
    private static boolean isFromActivityStart = false;
    /**
     * 结束动画
     */
    private static int exitAnimation = 0;

    /**
     * 获取启动intent
     *
     * @param context
     * @param tClass
     * @return
     */
    public static Intent getLaunchIntent(Context context, Class<? extends AnimationBaseActivity> tClass) {
        return new Intent(context, tClass);
    }

    /**
     * 带动画启动页面，覆盖系统原有动画样式原理是startactivity 前overridePendingTransition（）
     *
     * @param context 这里需要context是activity实例才能覆盖动画效果，否则仍旧是系统原有动画样式
     * @param intent  调用getLaunchIntent方法获取
     */
    public static void startWithOldAnimation(Context context, Intent intent) {
        if (context instanceof Activity) {
            isFromActivityStart = true;
            exitAnimation = 0;
            context.startActivity(intent);//须在activity启动前调用
//            ((Activity) context).overridePendingTransition(R.anim.slide_in_right, 0);本应该是这个参数，但是有的机型会有前一个activity结束动画，所以需要虚拟一个动画代替，做到保持原有页面不动的效果
            ((Activity) context).overridePendingTransition(R.anim.slide_in_right, R.anim.animo_no);
        } else {//context 非activity的情形 ,无法调用覆盖方法，因此还是系统默认的跳转动画
            isFromActivityStart = false;
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);
        }
    }

    /**
     * @param context        这里需要context是activity实例才能覆盖动画效果，否则仍旧是系统原有动画样式
     * @param intent         调用getLaunchIntent方法获取
     * @param enterAnimation 进入动画
     * @param exiteAnimation 结束动画
     */
    public static void startWithOldAnimation(Context context, Intent intent, int enterAnimation, int exiteAnimation) {
        if (context instanceof Activity) {
            isFromActivityStart = true;
            exitAnimation = exiteAnimation;
            context.startActivity(intent);
            ((Activity) context).overridePendingTransition(enterAnimation, R.anim.animo_no);
        } else {
            isFromActivityStart = false;
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);
        }
    }

    /**
     * 带动画启动页面，使用ActivityOptionsCompat实现 4.1以上有效
     *
     * @param context 这里需要context是activity实例才能覆盖动画效果，否则仍旧是系统原有动画样式
     * @param intent  调用getLaunchIntent方法获取
     */
    public static void startWithNewAnimation(Context context, Intent intent) {
        if (context instanceof Activity) {
            isFromActivityStart = true;
            exitAnimation = 0;
            ActivityOptionsCompat compat = ActivityOptionsCompat.makeCustomAnimation(context, R.anim.slide_in_right, R.anim.animo_no);
            ActivityCompat.startActivity((Activity) context, intent, compat.toBundle());
        } else {//context 非activity的情形 ,无法调用覆盖方法，因此还是系统默认的跳转动画
            isFromActivityStart = false;
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);
        }
    }

    /**
     * @param context        这里需要context是activity实例才能覆盖动画效果，否则仍旧是系统原有动画样式
     * @param intent         调用getLaunchIntent方法获取
     * @param enterAnimation 进入动画
     * @param exiteAnimation 结束动画
     */
    public static void startWithNewAnimation(Context context, Intent intent, int enterAnimation, int exiteAnimation) {
        if (context instanceof Activity) {
            isFromActivityStart = true;
            exitAnimation = exiteAnimation;
            ActivityOptionsCompat compat = ActivityOptionsCompat.makeCustomAnimation(context, enterAnimation, R.anim.animo_no);
            ActivityCompat.startActivity((Activity) context, intent, compat.toBundle());
        } else {
            isFromActivityStart = false;
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);
        }
    }

    /**
     * 在finish方法中覆盖原有动画样式，若之前不是通过activity启动的 则不覆盖，使动画样式一致
     */
    @Override
    public void finish() {
        super.finish();
        if (isFromActivityStart)
            overridePendingTransition(0, exitAnimation == 0 ? R.anim.slide_out_right : exitAnimation);
    }
}
